package org.dtrd.modules.archive.entity.po;

import com.baomidou.mybatisplus.annotation.*;
import org.dtrd.config.system.Constant;
import org.dtrd.modules.patient.entity.bean.PatientBasicAndFamilyInfo;
import org.dtrd.modules.questionnaire.entity.bean.PatientBasicInfo;
import org.dtrd.modules.questionnaire.entity.bean.QuestionnaireLifewayDetail;
import org.jetbrains.annotations.NotNull;

import javax.persistence.*;
import java.util.Date;
import java.util.Objects;

@Table(name = "dtrd_ent_rd_archive_basic")
@TableName("dtrd_ent_rd_archive_basic")
public class DtrdEntRdArchiveBasic {

    @Id
    @Column(name = "data_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(type = IdType.AUTO)
    private Integer dataId;

    @Column(name = "patient_id")
    private Integer patientId;

    /**
     * 建档日期
     */
    @Column(name = "record_date")
    private Date recordDate;

    /**
     * 姓名
     */
    private String name;

    /**
     * 性别：1-男,2-女
     */
    private Integer gender;

    /**
     * 出生年月日
     */
    private Date birth;

    /**
     * 职业：1-轻体力劳动,2-中体力劳动,3-重体力劳动
     */
    private Integer occupation;

    /**
     * 文化程度：1-未读,2-小学,3-初中,4-高中,5-中专,6-大专,7-本科,8-硕士或硕士以上
     */
    private Integer education;

    /**
     * 所属省份
     */
    @Column(name = "province_id")
    private Integer provinceId;

    /**
     * 所属地市
     */
    @Column(name = "city_id")
    private Integer cityId;

    /**
     * 手机号
     */
    private String mobile;

    /**
     * 身份证号
     */
    private String idcard;

    /**
     * 长期卧床：1-是,0-否
     */
    @Column(name = "is_sickbed")
    private Integer isSickbed;

    /**
     * 妊娠：1-备孕中,2-妊娠中,3-哺乳期
     */
    @TableField(value = "gestation", updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)
    private Integer gestation;

    /**
     * 妊娠日期
     */
    @Column(name = "gestation_date")
    @TableField(value = "gestation_date", updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)
    private Date gestationDate;

    /**
     * 患者属性：1-门诊,2-住院
     */
    @Column(name = "patient_property")
    private Integer patientProperty;

    /**
     * 医疗支付方式：1-社会医疗基本保险,2-新型农村合作医疗保险,3-城镇居民医疗保险,4-商业保险,5-公费医疗,6-自费医疗,7-其它
     */
    @Column(name = "pay_mode")
    private Integer payMode;

    /**
     * 婚姻状态: 1-已婚,2-未婚,3-单身,4-丧偶
     */
    @Column(name = "marital_status")
    private Integer maritalStatus;

    /**
     * 医保号码
     */
    @Column(name = "social_security_id")
    private String socialSecurityId;

    /**
     * 住址
     */
    private String address;

    /**
     * 工作单位
     */
    @Column(name = "work_unit")
    private String workUnit;

    /**
     * 民族
     */
    private String nation;

    /**
     * 收入水平
     */
    private String income;

    /**
     * 身高 cm
     */
    private Float height;

    /**
     * 体重 kg
     */
    private Float weight;

    /**
     * 患者头像
     */
    private String avatar;

    /**
     * 创建时间
     */
    @Column(name = "create_time")
    private Date createTime;

    @Column(name = "is_del")
    private Integer isDel;

    /**
     * 患者描述
     */
    @Column(name = "patient_description")
    private String patientDescription;
    /**
     * 患者体型照片
     */
    @Column(name = "patient_body_image")
    private String patientBodyImage;

    /**
     * 疾病类型；123 糖尿病 高血压 肥胖
     */
    @Column(name = "disease_profile")
    private String diseaseProfile;

    /**
     * 确认是否完成
     */
    private Integer isFinished;

    public DtrdEntRdArchiveBasic parseFromDTO(@NotNull PatientBasicAndFamilyInfo dto) {
        this.setPatientId(dto.getPatientId());
        this.setRecordDate(dto.getRecodeDate());
        this.setName(dto.getPatientName());
        this.setGender(dto.getPatientSex());
        this.setBirth(dto.getPatientBirth());
        this.setOccupation(dto.getOccupation());
        this.setProvinceId(dto.getProvinceId());
        this.setEducation(dto.getEducation());
        this.setCityId(dto.getCityId());
        this.setMobile(dto.getPatientMobile());
        this.setHeight(dto.getHeight());
        this.setWeight(dto.getWeight());
        this.setIdcard(dto.getPatientIdCard());
        this.setIsSickbed(dto.getIsSickbed());
        // 女性时才保存妊娠和妊娠时间
        if (Objects.equals(dto.getPatientSex(), Constant.Sex.WOMAN.getType())) {
            this.setGestation(dto.getGestation());
            // 妊娠中/备孕中不保存妊娠日期
            if (Objects.equals(dto.getGestation(), Constant.Gestation.LactationPeriod.getType())) {
                this.setGestationDate(dto.getGestationDate());
            }
        }
        this.setPatientProperty(dto.getPatientProperty());
        this.setPayMode(dto.getPayMode());
        this.setMaritalStatus(dto.getMaritalStatus());
        this.setSocialSecurityId(dto.getSocialSecurityId());
        this.setAddress(dto.getAddress());
        this.setWorkUnit(dto.getWorkUnit());
        this.setNation(dto.getNation());
        this.setPatientDescription(dto.getPatientDesc());
        this.setIncome(dto.getIncome());
        this.setHeight(dto.getHeight());
        this.setWeight(dto.getWeight());
        this.setAvatar(dto.getAvatar());
        this.setPatientBodyImage(dto.getPatientBodyImage());
        return this;
    }

    /**
     * @return data_id
     */
    public Integer getDataId() {
        return dataId;
    }

    /**
     * @param dataId
     */
    public void setDataId(Integer dataId) {
        this.dataId = dataId;
    }

    /**
     * @return patient_id
     */
    public Integer getPatientId() {
        return patientId;
    }

    /**
     * @param patientId
     */
    public void setPatientId(Integer patientId) {
        this.patientId = patientId;
    }

    /**
     * 获取建档日期
     *
     * @return record_date - 建档日期
     */
    public Date getRecordDate() {
        return recordDate;
    }

    /**
     * 设置建档日期
     *
     * @param recordDate 建档日期
     */
    public void setRecordDate(Date recordDate) {
        this.recordDate = recordDate;
    }

    /**
     * 获取姓名
     *
     * @return name - 姓名
     */
    public String getName() {
        return name;
    }

    /**
     * 设置姓名
     *
     * @param name 姓名
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取性别：1-男,2-女
     *
     * @return gender - 性别：1-男,2-女
     */
    public Integer getGender() {
        return gender;
    }

    /**
     * 设置性别：1-男,2-女
     *
     * @param gender 性别：1-男,2-女
     */
    public void setGender(Integer gender) {
        this.gender = gender;
    }

    /**
     * 获取出生年月日
     *
     * @return birth - 出生年月日
     */
    public Date getBirth() {
        return birth;
    }

    /**
     * 设置出生年月日
     *
     * @param birth 出生年月日
     */
    public void setBirth(Date birth) {
        this.birth = birth;
    }

    /**
     * 获取职业：1-轻体力劳动,2-中体力劳动,3-重体力劳动
     *
     * @return occupation - 职业：1-轻体力劳动,2-中体力劳动,3-重体力劳动
     */
    public Integer getOccupation() {
        return occupation;
    }

    /**
     * 设置职业：1-轻体力劳动,2-中体力劳动,3-重体力劳动
     *
     * @param occupation 职业：1-轻体力劳动,2-中体力劳动,3-重体力劳动
     */
    public void setOccupation(Integer occupation) {
        this.occupation = occupation;
    }

    /**
     * 获取文化程度：1-未读,2-小学,3-初中,4-高中,5-中专,6-大专,7-本科,8-硕士或硕士以上
     *
     * @return education - 文化程度：1-未读,2-小学,3-初中,4-高中,5-中专,6-大专,7-本科,8-硕士或硕士以上
     */
    public Integer getEducation() {
        return education;
    }

    /**
     * 设置文化程度：1-未读,2-小学,3-初中,4-高中,5-中专,6-大专,7-本科,8-硕士或硕士以上
     *
     * @param education 文化程度：1-未读,2-小学,3-初中,4-高中,5-中专,6-大专,7-本科,8-硕士或硕士以上
     */
    public void setEducation(Integer education) {
        this.education = education;
    }

    /**
     * 获取所属省份
     *
     * @return province_id - 所属省份
     */
    public Integer getProvinceId() {
        return provinceId;
    }

    /**
     * 设置所属省份
     *
     * @param provinceId 所属省份
     */
    public void setProvinceId(Integer provinceId) {
        this.provinceId = provinceId;
    }

    /**
     * 获取所属地市
     *
     * @return city_id - 所属地市
     */
    public Integer getCityId() {
        return cityId;
    }

    /**
     * 设置所属地市
     *
     * @param cityId 所属地市
     */
    public void setCityId(Integer cityId) {
        this.cityId = cityId;
    }

    /**
     * 获取手机号
     *
     * @return mobile - 手机号
     */
    public String getMobile() {
        return mobile;
    }

    /**
     * 设置手机号
     *
     * @param mobile 手机号
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     * 获取身份证号
     *
     * @return idcard - 身份证号
     */
    public String getIdcard() {
        return idcard;
    }

    /**
     * 设置身份证号
     *
     * @param idcard 身份证号
     */
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }

    /**
     * 获取长期卧床：1-是,0-否
     *
     * @return is_sickbed - 长期卧床：1-是,0-否
     */
    public Integer getIsSickbed() {
        return isSickbed;
    }

    /**
     * 设置长期卧床：1-是,0-否
     *
     * @param isSickbed 长期卧床：1-是,0-否
     */
    public void setIsSickbed(Integer isSickbed) {
        this.isSickbed = isSickbed;
    }

    /**
     * 获取妊娠：1-备孕中,2-妊娠中,3-哺乳期
     *
     * @return gestation - 妊娠：1-备孕中,2-妊娠中,3-哺乳期
     */
    public Integer getGestation() {
        return gestation;
    }

    /**
     * 设置妊娠：1-备孕中,2-妊娠中,3-哺乳期
     *
     * @param gestation 妊娠：1-备孕中,2-妊娠中,3-哺乳期
     */
    public void setGestation(Integer gestation) {
        this.gestation = gestation;
    }

    /**
     * 获取妊娠日期
     *
     * @return gestation_date - 妊娠日期
     */
    public Date getGestationDate() {
        return gestationDate;
    }

    /**
     * 设置妊娠日期
     *
     * @param gestationDate 妊娠日期
     */
    public void setGestationDate(Date gestationDate) {
        this.gestationDate = gestationDate;
    }

    /**
     * 获取患者属性：1-门诊,2-住院
     *
     * @return patient_property - 患者属性：1-门诊,2-住院
     */
    public Integer getPatientProperty() {
        return patientProperty;
    }

    /**
     * 设置患者属性：1-门诊,2-住院
     *
     * @param patientProperty 患者属性：1-门诊,2-住院
     */
    public void setPatientProperty(Integer patientProperty) {
        this.patientProperty = patientProperty;
    }

    /**
     * 获取医疗支付方式：1-社会医疗基本保险,2-新型农村合作医疗保险,3-城镇居民医疗保险,4-商业保险,5-公费医疗,6-自费医疗,7-其它
     *
     * @return pay_mode - 医疗支付方式：1-社会医疗基本保险,2-新型农村合作医疗保险,3-城镇居民医疗保险,4-商业保险,5-公费医疗,6-自费医疗,7-其它
     */
    public Integer getPayMode() {
        return payMode;
    }

    /**
     * 设置医疗支付方式：1-社会医疗基本保险,2-新型农村合作医疗保险,3-城镇居民医疗保险,4-商业保险,5-公费医疗,6-自费医疗,7-其它
     *
     * @param payMode 医疗支付方式：1-社会医疗基本保险,2-新型农村合作医疗保险,3-城镇居民医疗保险,4-商业保险,5-公费医疗,6-自费医疗,7-其它
     */
    public void setPayMode(Integer payMode) {
        this.payMode = payMode;
    }

    /**
     * 获取婚姻状态: 1-已婚,2-未婚,3-单身,4-丧偶
     *
     * @return marital_status - 婚姻状态: 1-已婚,2-未婚,3-单身,4-丧偶
     */
    public Integer getMaritalStatus() {
        return maritalStatus;
    }

    /**
     * 设置婚姻状态: 1-已婚,2-未婚,3-单身,4-丧偶
     *
     * @param maritalStatus 婚姻状态: 1-已婚,2-未婚,3-单身,4-丧偶
     */
    public void setMaritalStatus(Integer maritalStatus) {
        this.maritalStatus = maritalStatus;
    }

    /**
     * 获取医保号码
     *
     * @return social_security_id - 医保号码
     */
    public String getSocialSecurityId() {
        return socialSecurityId;
    }

    /**
     * 设置医保号码
     *
     * @param socialSecurityId 医保号码
     */
    public void setSocialSecurityId(String socialSecurityId) {
        this.socialSecurityId = socialSecurityId;
    }

    /**
     * 获取住址
     *
     * @return address - 住址
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置住址
     *
     * @param address 住址
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * 获取工作单位
     *
     * @return work_unit - 工作单位
     */
    public String getWorkUnit() {
        return workUnit;
    }

    /**
     * 设置工作单位
     *
     * @param workUnit 工作单位
     */
    public void setWorkUnit(String workUnit) {
        this.workUnit = workUnit;
    }

    /**
     * 获取民族
     *
     * @return nation - 民族
     */
    public String getNation() {
        return nation;
    }

    /**
     * 设置民族
     *
     * @param nation 民族
     */
    public void setNation(String nation) {
        this.nation = nation;
    }

    /**
     * 获取收入水平
     *
     * @return income - 收入水平
     */
    public String getIncome() {
        return income;
    }

    /**
     * 设置收入水平
     *
     * @param income 收入水平
     */
    public void setIncome(String income) {
        this.income = income;
    }

    /**
     * 获取身高 cm
     *
     * @return height - 身高 cm
     */
    public Float getHeight() {
        return height;
    }

    /**
     * 设置身高 cm
     *
     * @param height 身高 cm
     */
    public void setHeight(Float height) {
        this.height = height;
    }

    /**
     * 获取体重 kg
     *
     * @return weight - 体重 kg
     */
    public Float getWeight() {
        return weight;
    }

    /**
     * 设置体重 kg
     *
     * @param weight 体重 kg
     */
    public void setWeight(Float weight) {
        this.weight = weight;
    }

    /**
     * 获取患者头像
     *
     * @return avatar - 患者头像
     */
    public String getAvatar() {
        return avatar;
    }

    /**
     * 设置患者头像
     *
     * @param avatar 患者头像
     */
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    /**
     * 获取创建时间
     *
     * @return create_time - 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * @return is_del
     */
    public Integer getIsDel() {
        return isDel;
    }

    /**
     * @param isDel
     */
    public void setIsDel(Integer isDel) {
        this.isDel = isDel;
    }

    /**
     * 获取患者描述
     *
     * @return patient_description - 患者描述
     */
    public String getPatientDescription() {
        return patientDescription;
    }

    /**
     * 设置患者描述
     *
     * @param patientDescription 患者描述
     */
    public void setPatientDescription(String patientDescription) {
        this.patientDescription = patientDescription;
    }

    public Integer getIsFinished() {
        return isFinished;
    }

    public void setIsFinished(Integer isFinished) {
        this.isFinished = isFinished;
    }

    public String getPatientBodyImage() {
        return patientBodyImage;
    }

    public void setPatientBodyImage(String patientBodyImage) {
        this.patientBodyImage = patientBodyImage;
    }

    public String getDiseaseProfile() { return diseaseProfile; }

    public void setDiseaseProfile(String diseaseProfile) { this.diseaseProfile = diseaseProfile; }

    public DtrdEntRdArchiveBasic parseFromDTO(QuestionnaireLifewayDetail dto) {
        maritalStatus = dto.getMaritalStatus();
        education = dto.getEducationStatus();
        income = dto.getIncomeStatus() + "";
        return this;
    }

    public DtrdEntRdArchiveBasic parseFromDTO(PatientBasicInfo info) {
        patientId = info.getPatientId();
        mobile = info.getPhone();
        patientBodyImage = info.getPatientBodyImage();
        name = info.getName();
        birth = info.getBirthday();
        gender = info.getSex();
        recordDate = new Date();
        diseaseProfile = info.getDiseaseProfile();
        return this;
    }

    public DtrdEntRdArchiveBasic init() {
        isDel = 0;
        createTime = new Date();
        return this;
    }
}